package com.been.common.dao;

import java.io.Serializable;
import java.util.List;

import com.been.common.model.BaseModel;
import com.been.common.page.PageInfo;

/**
 * 通用泛型化DAO，继承自{@link PubDAO}，对PubDAO的方法进行了泛型化处理。<br/>
 * 继承此类的DAO在对自己所管理的Model进行操作的时候不比在指定实体类型，但在继承时要指定管理的实体类型，如<br/> 
 * <code>
 * 		public class TestDAO extends GenericDAO<{@link cn.cdyc.basedata.model.TbbaseUserInfo}> {
 * 		}
 * </code>
 * @param <T>
 * @author been
 * 2011-10-01
 */
public interface GenericDAO<T extends BaseModel> extends PublicDAO {
	
	/**
	 * 分页查询
	 * @param <M>
	 * @param queryString
	 * @param parameters
	 * @param pageInfo
	 * @return
	 */
	List<T> findByPage(String queryString, Object[] parameters,
			PageInfo pageInfo);
	
	/**
	 * 根据条件通过设置参数查询对象。
	 * @param queryString 需要查询的实体对象
	 * @param parameters 需要设置的参数
	 * @return
	 */
	List<T> findByQuery(String queryString,Object[] parameters);
	
	/**
	 * 根据序列化ID查询默认类型对象，当数据库不存在该对象时，返回null。
	 * @param id 查询ID
	 * @return T 类型对象
	 */
	T findById(Serializable id);
	
	/**
	 * 根据id拼接参数删除对象，用“，”拼接的ID
	 * @param ids
	 * @return int 返回删除的记录数
	 */
	int deleteByIds(String ids);
	
	/**
	 * 按示例对象查找，即将示例对象的属性作为条件（主键忽略，null值属性忽略）
	 * @param instance
	 *            示例对象
	 * @return 查出的对象List
	 */
	List<T> findByExample(T instance);
}
